package com.jmb.api.common.annotate;

import jakarta.servlet.http.HttpServletRequest;
import org.springframework.core.MethodParameter;
import org.springframework.data.domain.PageRequest;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;

public class PageParamsArgumentResolver implements HandlerMethodArgumentResolver {
    @Override
    public boolean supportsParameter(MethodParameter parameter) {
        return parameter.hasParameterAnnotation(PageParams.class);
    }

    @Override
    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
        HttpServletRequest request = (HttpServletRequest) webRequest.getNativeRequest();
        PageParams annotation = parameter.getParameterAnnotation(PageParams.class);
        return PageRequest.of(
                Integer.parseInt(request.getParameter("pageNum") != null ?
                        request.getParameter("pageNum") : annotation.pageNum()),
                Integer.parseInt(request.getParameter("pageSize") != null ?
                        request.getParameter("pageSize") : annotation.pageSize())
        );
    }

}
